package com.wang.loanassembly.utile;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

import java.util.ArrayList;
import java.util.List;

public class CodeGenerator {
    public static void main(String[] args) {
        //改你的项目路径
        String projectPath="E:\\IdeaProjects\\ddc\\ddc-financial-platform\\ddc-loan-module\\loan-assembly\\src\\main\\";
        AutoGenerator ag = new AutoGenerator();
        //1. 全局配置
        GlobalConfig config = new GlobalConfig();
        config.setAuthor("lichacha") //作者
                .setOutputDir(projectPath+"java")  //生成路径
                .setFileOverride(true)//是否文件覆盖，如果多次
                .setIdType(IdType.AUTO) //主键策略
                .setServiceName("%sService") //设置生成的service接口名首字母不用I开头
                .setBaseResultMap(true)//映射文件中生成默认的baseMap
                .setBaseColumnList(true);//映射文件中生成默认的基础列名sql
        //2. 数据源配置
        DataSourceConfig dsConfig = new DataSourceConfig();
        dsConfig.setDbType(DbType.MYSQL)
                //只需要改数据库这里
                .setUrl("jdbc:mysql://39.103.187.220:3306/ddc_loan?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai")
                .setDriverName("com.mysql.jdbc.Driver")
                .setUsername("root")
                .setPassword("8704885b9d4745dcbb0c9e413fe13bba");
        //3.策略配置
        StrategyConfig stConfig = new StrategyConfig();
        stConfig.setCapitalMode(true) // 全局大写命名
                .setNaming(NamingStrategy.underline_to_camel) //下划线转驼峰
//改你自己的表名
                .setInclude(new String[]{"channel_provider_lending",
                        "collection_third_party"
                        ,"debt_collection",
                        "information_template",
                        "interest_rate_table",
                        "loan_purpose"
                        ,"loan_record",
                        "loan_repay_method",
                        "overdue_repayment",
                        "overdue_debt",
                        "platform_lending",
                        "repayment_schedule"});//生成的表,参数为数组
        //4.包名策略
        PackageConfig pkConfig = new PackageConfig();
        pkConfig.setParent("loanassembly")//父包名
           .setController("controller")
                .setEntity("model")
               .setService("service")
                .setMapper("mapper");

        //5.生成xml的配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
            }
        };
        String templatePath = "/templates/mapper.xml.vm";
        // 自定义配置会被优先输出
        focList.add(new FileOutConfig(templatePath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 ， 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化！！
                return projectPath+"\\resources\\mappers\\"+ tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        // 配置模板
        TemplateConfig templateConfig = new TemplateConfig();
        //不生成如下类型模板
        templateConfig.setXml(null);
        ag.setTemplate(templateConfig);
        //6.整合配置
        ag.setGlobalConfig(config)
                .setDataSource(dsConfig)
                .setStrategy(stConfig)
                .setPackageInfo(pkConfig)
                .setCfg(cfg)
                .setTemplateEngine(new VelocityTemplateEngine());
        ag.execute();
    }
}